﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using RESTVeterinariaServices.Dominio;
using RESTVeterinariaServices.Persistencia;
using System.Data.SqlClient;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Net;

namespace RESTVeterinariaServices
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de clase "ProductoService" en el código, en svc y en el archivo de configuración a la vez.
    public class ProductoService : IProductoService
    {
        private ProductoDAO dao = new ProductoDAO();

        public Producto CrearProducto(Producto ProductoACrear)
        {
            return dao.Crear(ProductoACrear);
        }

        public Producto ObtenerProducto(string IdProducto)
        {
            return dao.obtener(IdProducto);
        }

        public List<Producto> ListarTodos()
        {
            return dao.ListarTodos();
        }

        public Producto ModificarProducto(Producto ProductoAModificar)
        {
            int existe = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM dbo.Producto WHERE txtProducto=@txtProducto AND IdProducto<>@IdProducto";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@txtProducto", ProductoAModificar.txtProducto));
                    valida.Parameters.Add(new SqlParameter("@IdProducto", ProductoAModificar.IdProducto));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El nombre del Producto ya existe, por favor ingresar uno distinto",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            return dao.Modificar(ProductoAModificar);
        }

        public void EliminarProducto(string IdProducto)
        {

        }
    }
}
